home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / madwifi / net80211 / ieee80211.h < prev    next >
C/C++ Source or Header  |  2006-05-11  |  31KB  |  910 lines

  1. /*-
  2.  * Copyright (c) 2001 Atsushi Onoe
  3.  * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. The name of the author may not be used to endorse or promote products
  15.  *    derived from this software without specific prior written permission.
  16.  *
  17.  * Alternatively, this software may be distributed under the terms of the
  18.  * GNU General Public License ("GPL") version 2 as published by the Free
  19.  * Software Foundation.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  22.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  23.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  24.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  25.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  26.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  30.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * $Id: ieee80211.h 1488 2006-03-31 23:57:41Z kelmo $
  33.  */
  34. #ifndef _NET80211_IEEE80211_H_
  35. #define _NET80211_IEEE80211_H_
  36.  
  37. /*
  38.  * 802.11 protocol definitions.
  39.  */
  40.  
  41. #define    IEEE80211_ADDR_LEN        6        /* size of 802.11 address */
  42. /* is 802.11 address multicast/broadcast? */
  43. #define    IEEE80211_IS_MULTICAST(_a)    (*(_a) & 0x01)
  44.  
  45. /* IEEE 802.11 PLCP header */
  46. struct ieee80211_plcp_hdr {
  47.     u_int16_t i_sfd;
  48.     u_int8_t i_signal;
  49.     u_int8_t i_service;
  50.     u_int16_t i_length;
  51.     u_int16_t i_crc;
  52. } __packed;
  53.  
  54. #define IEEE80211_PLCP_SFD      0xF3A0 
  55. #define IEEE80211_PLCP_SERVICE  0x00
  56.  
  57. /*
  58.  * generic definitions for IEEE 802.11 frames
  59.  */
  60. struct ieee80211_frame {
  61.     u_int8_t i_fc[2];
  62.     u_int8_t i_dur[2];
  63.     u_int8_t i_addr1[IEEE80211_ADDR_LEN];
  64.     u_int8_t i_addr2[IEEE80211_ADDR_LEN];
  65.     u_int8_t i_addr3[IEEE80211_ADDR_LEN];
  66.     u_int8_t i_seq[2];
  67.     /* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
  68.     /* see below */
  69. } __packed;
  70.  
  71. struct ieee80211_qosframe {
  72.     u_int8_t i_fc[2];
  73.     u_int8_t i_dur[2];
  74.     u_int8_t i_addr1[IEEE80211_ADDR_LEN];
  75.     u_int8_t i_addr2[IEEE80211_ADDR_LEN];
  76.     u_int8_t i_addr3[IEEE80211_ADDR_LEN];
  77.     u_int8_t i_seq[2];
  78.     u_int8_t i_qos[2];
  79.     /* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
  80.     /* see below */
  81. } __packed;
  82.  
  83. struct ieee80211_qoscntl {
  84.     u_int8_t i_qos[2];
  85. };
  86.  
  87. struct ieee80211_frame_addr4 {
  88.     u_int8_t i_fc[2];
  89.     u_int8_t i_dur[2];
  90.     u_int8_t i_addr1[IEEE80211_ADDR_LEN];
  91.     u_int8_t i_addr2[IEEE80211_ADDR_LEN];
  92.     u_int8_t i_addr3[IEEE80211_ADDR_LEN];
  93.     u_int8_t i_seq[2];
  94.     u_int8_t i_addr4[IEEE80211_ADDR_LEN];
  95. } __packed;
  96.  
  97.  
  98. struct ieee80211_qosframe_addr4 {
  99.     u_int8_t i_fc[2];
  100.     u_int8_t i_dur[2];
  101.     u_int8_t i_addr1[IEEE80211_ADDR_LEN];
  102.     u_int8_t i_addr2[IEEE80211_ADDR_LEN];
  103.     u_int8_t i_addr3[IEEE80211_ADDR_LEN];
  104.     u_int8_t i_seq[2];
  105.     u_int8_t i_addr4[IEEE80211_ADDR_LEN];
  106.     u_int8_t i_qos[2];
  107. } __packed;
  108.  
  109. struct ieee80211_ctlframe_addr2 {
  110.     u_int8_t i_fc[2];
  111.     u_int8_t i_aidordur[2]; /* AID or duration */
  112.     u_int8_t i_addr1[IEEE80211_ADDR_LEN];
  113.     u_int8_t i_addr2[IEEE80211_ADDR_LEN];
  114. } __packed;
  115.  
  116. #define    IEEE80211_FC0_VERSION_MASK        0x03
  117. #define    IEEE80211_FC0_VERSION_SHIFT        0
  118. #define    IEEE80211_FC0_VERSION_0            0x00
  119. #define    IEEE80211_FC0_TYPE_MASK            0x0c
  120. #define    IEEE80211_FC0_TYPE_SHIFT        2
  121. #define    IEEE80211_FC0_TYPE_MGT            0x00
  122. #define    IEEE80211_FC0_TYPE_CTL            0x04
  123. #define    IEEE80211_FC0_TYPE_DATA            0x08
  124.  
  125. #define    IEEE80211_FC0_SUBTYPE_MASK        0xf0
  126. #define    IEEE80211_FC0_SUBTYPE_SHIFT        4
  127. /* for TYPE_MGT */
  128. #define    IEEE80211_FC0_SUBTYPE_ASSOC_REQ        0x00
  129. #define    IEEE80211_FC0_SUBTYPE_ASSOC_RESP    0x10
  130. #define    IEEE80211_FC0_SUBTYPE_REASSOC_REQ    0x20
  131. #define    IEEE80211_FC0_SUBTYPE_REASSOC_RESP    0x30
  132. #define    IEEE80211_FC0_SUBTYPE_PROBE_REQ        0x40
  133. #define    IEEE80211_FC0_SUBTYPE_PROBE_RESP    0x50
  134. #define    IEEE80211_FC0_SUBTYPE_BEACON        0x80
  135. #define    IEEE80211_FC0_SUBTYPE_ATIM        0x90
  136. #define    IEEE80211_FC0_SUBTYPE_DISASSOC        0xa0
  137. #define    IEEE80211_FC0_SUBTYPE_AUTH        0xb0
  138. #define    IEEE80211_FC0_SUBTYPE_DEAUTH        0xc0
  139. #define IEEE80211_FC0_SUBTYPE_ACTION        0xd0
  140. /* for TYPE_CTL */
  141. #define    IEEE80211_FC0_SUBTYPE_PS_POLL        0xa0
  142. #define    IEEE80211_FC0_SUBTYPE_RTS        0xb0
  143. #define    IEEE80211_FC0_SUBTYPE_CTS        0xc0
  144. #define    IEEE80211_FC0_SUBTYPE_ACK        0xd0
  145. #define    IEEE80211_FC0_SUBTYPE_CF_END        0xe0
  146. #define    IEEE80211_FC0_SUBTYPE_CF_END_ACK    0xf0
  147. /* for TYPE_DATA (bit combination) */
  148. #define    IEEE80211_FC0_SUBTYPE_DATA        0x00
  149. #define    IEEE80211_FC0_SUBTYPE_CF_ACK        0x10
  150. #define    IEEE80211_FC0_SUBTYPE_CF_POLL        0x20
  151. #define    IEEE80211_FC0_SUBTYPE_CF_ACPL        0x30
  152. #define    IEEE80211_FC0_SUBTYPE_NODATA        0x40
  153. #define    IEEE80211_FC0_SUBTYPE_CFACK        0x50
  154. #define    IEEE80211_FC0_SUBTYPE_CFPOLL        0x60
  155. #define    IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK    0x70
  156. #define    IEEE80211_FC0_SUBTYPE_QOS        0x80
  157. #define    IEEE80211_FC0_SUBTYPE_QOS_NULL        0xc0
  158.  
  159. #define    IEEE80211_FC1_DIR_MASK            0x03
  160. #define    IEEE80211_FC1_DIR_NODS            0x00    /* STA->STA */
  161. #define    IEEE80211_FC1_DIR_TODS            0x01    /* STA->AP  */
  162. #define    IEEE80211_FC1_DIR_FROMDS        0x02    /* AP ->STA */
  163. #define    IEEE80211_FC1_DIR_DSTODS        0x03    /* AP ->AP  */
  164.  
  165. #define    IEEE80211_FC1_MORE_FRAG            0x04
  166. #define    IEEE80211_FC1_RETRY            0x08
  167. #define    IEEE80211_FC1_PWR_MGT            0x10
  168. #define    IEEE80211_FC1_MORE_DATA            0x20
  169. #define    IEEE80211_FC1_WEP            0x40
  170. #define    IEEE80211_FC1_ORDER            0x80
  171.  
  172. #define    IEEE80211_SEQ_FRAG_MASK            0x000f
  173. #define    IEEE80211_SEQ_FRAG_SHIFT        0
  174. #define    IEEE80211_SEQ_SEQ_MASK            0xfff0
  175. #define    IEEE80211_SEQ_SEQ_SHIFT            4
  176.  
  177. #define    IEEE80211_SEQ_LEQ(a,b)    ((int)((a)-(b)) <= 0)
  178.  
  179. #define    IEEE80211_NWID_LEN            32
  180.  
  181. #define    IEEE80211_QOS_TXOP            0x00ff
  182. /* bit 8 is reserved */
  183. #define    IEEE80211_QOS_ACKPOLICY            0x60
  184. #define    IEEE80211_QOS_ACKPOLICY_S        5
  185. #define    IEEE80211_QOS_EOSP            0x10
  186. #define    IEEE80211_QOS_EOSP_S            4
  187. #define    IEEE80211_QOS_TID            0x0f
  188.  
  189. /*
  190.  * Country/Region Codes from MS WINNLS.H
  191.  * Numbering from ISO 3166
  192.  * XXX belongs elsewhere
  193.  */
  194. enum CountryCode {
  195.     CTRY_ALBANIA              = 8,       /* Albania */
  196.     CTRY_ALGERIA              = 12,      /* Algeria */
  197.     CTRY_ARGENTINA            = 32,      /* Argentina */
  198.     CTRY_ARMENIA              = 51,      /* Armenia */
  199.     CTRY_AUSTRALIA            = 36,      /* Australia */
  200.     CTRY_AUSTRIA              = 40,      /* Austria */
  201.     CTRY_AZERBAIJAN           = 31,      /* Azerbaijan */
  202.     CTRY_BAHRAIN              = 48,      /* Bahrain */
  203.     CTRY_BELARUS              = 112,     /* Belarus */
  204.     CTRY_BELGIUM              = 56,      /* Belgium */
  205.     CTRY_BELIZE               = 84,      /* Belize */
  206.     CTRY_BOLIVIA              = 68,      /* Bolivia */
  207.     CTRY_BRAZIL               = 76,      /* Brazil */
  208.     CTRY_BRUNEI_DARUSSALAM    = 96,      /* Brunei Darussalam */
  209.     CTRY_BULGARIA             = 100,     /* Bulgaria */
  210.     CTRY_CANADA               = 124,     /* Canada */
  211.     CTRY_CHILE                = 152,     /* Chile */
  212.     CTRY_CHINA                = 156,     /* People's Republic of China */
  213.     CTRY_COLOMBIA             = 170,     /* Colombia */
  214.     CTRY_COSTA_RICA           = 188,     /* Costa Rica */
  215.     CTRY_CROATIA              = 191,     /* Croatia */
  216.     CTRY_CYPRUS               = 196,
  217.     CTRY_CZECH                = 203,     /* Czech Republic */
  218.     CTRY_DENMARK              = 208,     /* Denmark */
  219.     CTRY_DOMINICAN_REPUBLIC   = 214,     /* Dominican Republic */
  220.     CTRY_ECUADOR              = 218,     /* Ecuador */
  221.     CTRY_EGYPT                = 818,     /* Egypt */
  222.     CTRY_EL_SALVADOR          = 222,     /* El Salvador */
  223.     CTRY_ESTONIA              = 233,     /* Estonia */
  224.     CTRY_FAEROE_ISLANDS       = 234,     /* Faeroe Islands */
  225.     CTRY_FINLAND              = 246,     /* Finland */
  226.     CTRY_FRANCE               = 250,     /* France */
  227.     CTRY_FRANCE2              = 255,     /* France2 */
  228.     CTRY_GEORGIA              = 268,     /* Georgia */
  229.     CTRY_GERMANY              = 276,     /* Germany */
  230.     CTRY_GREECE               = 300,     /* Greece */
  231.     CTRY_GUATEMALA            = 320,     /* Guatemala */
  232.     CTRY_HONDURAS             = 340,     /* Honduras */
  233.     CTRY_HONG_KONG            = 344,     /* Hong Kong S.A.R., P.R.C. */
  234.     CTRY_HUNGARY              = 348,     /* Hungary */
  235.     CTRY_ICELAND              = 352,     /* Iceland */
  236.     CTRY_INDIA                = 356,     /* India */
  237.     CTRY_INDONESIA            = 360,     /* Indonesia */
  238.     CTRY_IRAN                 = 364,     /* Iran */
  239.     CTRY_IRAQ                 = 368,     /* Iraq */
  240.     CTRY_IRELAND              = 372,     /* Ireland */
  241.     CTRY_ISRAEL               = 376,     /* Israel */
  242.     CTRY_ITALY                = 380,     /* Italy */
  243.     CTRY_JAMAICA              = 388,     /* Jamaica */
  244.     CTRY_JAPAN                = 392,     /* Japan */
  245.     CTRY_JAPAN1               = 393,     /* Japan (JP1) */
  246.     CTRY_JAPAN2               = 394,     /* Japan (JP0) */
  247.     CTRY_JAPAN3               = 395,     /* Japan (JP1-1) */
  248.     CTRY_JAPAN4               = 396,     /* Japan (JE1) */
  249.     CTRY_JAPAN5               = 397,     /* Japan (JE2) */
  250.     CTRY_JAPAN6               = 399,     /* Japan (JP6) */
  251.     CTRY_JAPAN7               = 900,     /* Japan */
  252.     CTRY_JAPAN8               = 901,     /* Japan */
  253.     CTRY_JAPAN9               = 902,     /* Japan */
  254.     CTRY_JAPAN10          = 903,     /* Japan */
  255.     CTRY_JAPAN11          = 904,     /* Japan */
  256.     CTRY_JAPAN12          = 905,     /* Japan */
  257.     CTRY_JAPAN13          = 906,     /* Japan */
  258.     CTRY_JAPAN14          = 907,     /* Japan */
  259.     CTRY_JAPAN15          = 908,     /* Japan */
  260.     CTRY_JAPAN16          = 909,     /* Japan */
  261.     CTRY_JAPAN17          = 910,     /* Japan */
  262.     CTRY_JAPAN18          = 911,     /* Japan */
  263.     CTRY_JAPAN19          = 912,     /* Japan */
  264.     CTRY_JAPAN20          = 913,     /* Japan */
  265.     CTRY_JAPAN21          = 914,     /* Japan */
  266.     CTRY_JAPAN22          = 915,     /* Japan */
  267.     CTRY_JAPAN23          = 916,     /* Japan */
  268.     CTRY_JAPAN24          = 917,     /* Japan */
  269.     CTRY_JAPAN25          = 918,     /* Japan */
  270.     CTRY_JAPAN26          = 919,     /* Japan */
  271.     CTRY_JAPAN27          = 920,     /* Japan */
  272.     CTRY_JAPAN28          = 921,     /* Japan */
  273.     CTRY_JAPAN29          = 922,     /* Japan */
  274.     CTRY_JAPAN30          = 923,     /* Japan */
  275.     CTRY_JAPAN31          = 924,     /* Japan */
  276.     CTRY_JAPAN32          = 925,     /* Japan */
  277.     CTRY_JAPAN33          = 926,     /* Japan */
  278.     CTRY_JAPAN34          = 927,     /* Japan */
  279.     CTRY_JAPAN35          = 928,     /* Japan */
  280.     CTRY_JAPAN36          = 929,     /* Japan */
  281.     CTRY_JAPAN37          = 930,     /* Japan */
  282.     CTRY_JAPAN38          = 931,     /* Japan */
  283.     CTRY_JAPAN39          = 932,     /* Japan */
  284.     CTRY_JAPAN40          = 933,     /* Japan */
  285.     CTRY_JAPAN41          = 934,     /* Japan */
  286.     CTRY_JAPAN42          = 935,     /* Japan */
  287.     CTRY_JAPAN43          = 936,     /* Japan */
  288.     CTRY_JAPAN44          = 937,     /* Japan */
  289.     CTRY_JAPAN45          = 938,     /* Japan */
  290.     CTRY_JAPAN46          = 939,     /* Japan */
  291.     CTRY_JAPAN47          = 940,     /* Japan */
  292.     CTRY_JAPAN48          = 941,     /* Japan */
  293.     CTRY_JORDAN               = 400,     /* Jordan */
  294.     CTRY_KAZAKHSTAN           = 398,     /* Kazakhstan */
  295.     CTRY_KENYA                = 404,     /* Kenya */
  296.     CTRY_KOREA_NORTH          = 408,     /* North Korea */
  297.     CTRY_KOREA_ROC            = 410,     /* South Korea */
  298.     CTRY_KOREA_ROC2           = 411,     /* South Korea */
  299.     CTRY_KUWAIT               = 414,     /* Kuwait */
  300.     CTRY_LATVIA               = 428,     /* Latvia */
  301.     CTRY_LEBANON              = 422,     /* Lebanon */
  302.     CTRY_LIBYA                = 434,     /* Libya */
  303.     CTRY_LIECHTENSTEIN        = 438,     /* Liechtenstein */
  304.     CTRY_LITHUANIA            = 440,     /* Lithuania */
  305.     CTRY_LUXEMBOURG           = 442,     /* Luxembourg */
  306.     CTRY_MACAU                = 446,     /* Macau */
  307.     CTRY_MACEDONIA            = 807,     /* the Former Yugoslav Republic of Macedonia */
  308.     CTRY_MALAYSIA             = 458,     /* Malaysia */
  309.     CTRY_MEXICO               = 484,     /* Mexico */
  310.     CTRY_MONACO               = 492,     /* Principality of Monaco */
  311.     CTRY_MOROCCO              = 504,     /* Morocco */
  312.     CTRY_NETHERLANDS          = 528,     /* Netherlands */
  313.     CTRY_NEW_ZEALAND          = 554,     /* New Zealand */
  314.     CTRY_NICARAGUA            = 558,     /* Nicaragua */
  315.     CTRY_NORWAY               = 578,     /* Norway */
  316.     CTRY_OMAN                 = 512,     /* Oman */
  317.     CTRY_PAKISTAN             = 586,     /* Islamic Republic of Pakistan */
  318.     CTRY_PANAMA               = 591,     /* Panama */
  319.     CTRY_PARAGUAY             = 600,     /* Paraguay */
  320.     CTRY_PERU                 = 604,     /* Peru */
  321.     CTRY_PHILIPPINES          = 608,     /* Republic of the Philippines */
  322.     CTRY_POLAND               = 616,     /* Poland */
  323.     CTRY_PORTUGAL             = 620,     /* Portugal */
  324.     CTRY_PUERTO_RICO          = 630,     /* Puerto Rico */
  325.     CTRY_QATAR                = 634,     /* Qatar */
  326.     CTRY_ROMANIA              = 642,     /* Romania */
  327.     CTRY_RUSSIA               = 643,     /* Russia */
  328.     CTRY_SAUDI_ARABIA         = 682,     /* Saudi Arabia */
  329.     CTRY_SINGAPORE            = 702,     /* Singapore */
  330.     CTRY_SLOVAKIA             = 703,     /* Slovak Republic */
  331.     CTRY_SLOVENIA             = 705,     /* Slovenia */
  332.     CTRY_SOUTH_AFRICA         = 710,     /* South Africa */
  333.     CTRY_SPAIN                = 724,     /* Spain */
  334.     CTRY_SWEDEN               = 752,     /* Sweden */
  335.     CTRY_SWITZERLAND          = 756,     /* Switzerland */
  336.     CTRY_SYRIA                = 760,     /* Syria */
  337.     CTRY_TAIWAN               = 158,     /* Taiwan */
  338.     CTRY_THAILAND             = 764,     /* Thailand */
  339.     CTRY_TRINIDAD_Y_TOBAGO    = 780,     /* Trinidad y Tobago */
  340.     CTRY_TUNISIA              = 788,     /* Tunisia */
  341.     CTRY_TURKEY               = 792,     /* Turkey */
  342.     CTRY_UAE                  = 784,     /* U.A.E. */
  343.     CTRY_UKRAINE              = 804,     /* Ukraine */
  344.     CTRY_UNITED_KINGDOM       = 826,     /* United Kingdom */
  345.     CTRY_UNITED_STATES        = 840,     /* United States */
  346.     CTRY_UNITED_STATES_FCC49  = 842,     /* United States (Public Safety)*/
  347.     CTRY_URUGUAY              = 858,     /* Uruguay */
  348.     CTRY_UZBEKISTAN           = 860,     /* Uzbekistan */
  349.     CTRY_VENEZUELA            = 862,     /* Venezuela */
  350.     CTRY_VIET_NAM             = 704,     /* Viet Nam */
  351.     CTRY_YEMEN                = 887,     /* Yemen */
  352.     CTRY_ZIMBABWE             = 716      /* Zimbabwe */
  353. };
  354.  
  355. /* 
  356.  * Country information element.
  357.  */
  358. #define IEEE80211_COUNTRY_MAX_TRIPLETS (83)
  359. struct ieee80211_ie_country {
  360.     u_int8_t country_id;
  361.     u_int8_t country_len;
  362.     u_int8_t country_str[3];
  363.     u_int8_t country_triplet[IEEE80211_COUNTRY_MAX_TRIPLETS * 3];
  364. } __packed;
  365.  
  366. /* does frame have QoS sequence control data */
  367. #define    IEEE80211_QOS_HAS_SEQ(wh) \
  368.     (((wh)->i_fc[0] & \
  369.       (IEEE80211_FC0_TYPE_MASK | IEEE80211_FC0_SUBTYPE_QOS)) == \
  370.       (IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS))
  371.  
  372. #define WME_QOSINFO_COUNT    0x0f  /* Mask for Param Set Count field */
  373. /*
  374.  * WME/802.11e information element.
  375.  */
  376. struct ieee80211_ie_wme {
  377.     u_int8_t wme_id;        /* IEEE80211_ELEMID_VENDOR */
  378.     u_int8_t wme_len;    /* length in bytes */
  379.     u_int8_t wme_oui[3];    /* 0x00, 0x50, 0xf2 */
  380.     u_int8_t wme_type;    /* OUI type */
  381.     u_int8_t wme_subtype;    /* OUI subtype */
  382.     u_int8_t wme_version;    /* spec revision */
  383.     u_int8_t wme_info;    /* QoS info */
  384. } __packed;
  385.  
  386. /*
  387.  * WME/802.11e Tspec Element
  388.  */
  389. struct ieee80211_wme_tspec {
  390.     u_int8_t ts_id;
  391.     u_int8_t ts_len;
  392.     u_int8_t ts_oui[3];
  393.     u_int8_t ts_oui_type;
  394.     u_int8_t ts_oui_subtype;
  395.     u_int8_t ts_version;
  396.     u_int8_t ts_tsinfo[3];
  397.     u_int8_t ts_nom_msdu[2];
  398.     u_int8_t ts_max_msdu[2];
  399.     u_int8_t ts_min_svc[4];
  400.     u_int8_t ts_max_svc[4];
  401.     u_int8_t ts_inactv_intv[4];
  402.     u_int8_t ts_susp_intv[4];
  403.     u_int8_t ts_start_svc[4];
  404.     u_int8_t ts_min_rate[4];
  405.     u_int8_t ts_mean_rate[4];
  406.     u_int8_t ts_max_burst[4];
  407.     u_int8_t ts_min_phy[4];
  408.     u_int8_t ts_peak_rate[4];
  409.     u_int8_t ts_delay[4];
  410.     u_int8_t ts_surplus[2];
  411.     u_int8_t ts_medium_time[2];
  412. } __packed;
  413.  
  414. /*
  415.  * WME AC parameter field
  416.  */
  417.  
  418. struct ieee80211_wme_acparams {
  419.     u_int8_t acp_aci_aifsn;
  420.     u_int8_t acp_logcwminmax;
  421.     u_int16_t acp_txop;
  422. } __packed;
  423.  
  424. #define IEEE80211_WME_PARAM_LEN 24
  425. #define WME_NUM_AC        4    /* 4 AC categories */
  426.  
  427. #define WME_PARAM_ACI        0x60    /* Mask for ACI field */
  428. #define WME_PARAM_ACI_S        5    /* Shift for ACI field */
  429. #define WME_PARAM_ACM        0x10    /* Mask for ACM bit */
  430. #define WME_PARAM_ACM_S        4    /* Shift for ACM bit */
  431. #define WME_PARAM_AIFSN        0x0f    /* Mask for aifsn field */
  432. #define WME_PARAM_AIFSN_S    0    /* Shift for aifsn field */
  433. #define WME_PARAM_LOGCWMIN    0x0f    /* Mask for CwMin field (in log) */
  434. #define WME_PARAM_LOGCWMIN_S    0    /* Shift for CwMin field */
  435. #define WME_PARAM_LOGCWMAX    0xf0    /* Mask for CwMax field (in log) */
  436. #define WME_PARAM_LOGCWMAX_S    4    /* Shift for CwMax field */
  437.  
  438. #define WME_AC_TO_TID(_ac) (       \
  439.     ((_ac) == WME_AC_VO) ? 6 : \
  440.     ((_ac) == WME_AC_VI) ? 5 : \
  441.     ((_ac) == WME_AC_BK) ? 1 : \
  442.     0)
  443.  
  444. #define TID_TO_WME_AC(_tid) (      \
  445.     ((_tid) < 1) ? WME_AC_BE : \
  446.     ((_tid) < 3) ? WME_AC_BK : \
  447.     ((_tid) < 6) ? WME_AC_VI : \
  448.     WME_AC_VO)
  449.  
  450. /*
  451.  * WME Parameter Element
  452.  */
  453.  
  454. struct ieee80211_wme_param {
  455.     u_int8_t param_id;
  456.     u_int8_t param_len;
  457.     u_int8_t param_oui[3];
  458.     u_int8_t param_oui_type;
  459.     u_int8_t param_oui_sybtype;
  460.     u_int8_t param_version;
  461.     u_int8_t param_qosInfo;
  462.     u_int8_t param_reserved;
  463.     struct ieee80211_wme_acparams    params_acParams[WME_NUM_AC];
  464. } __packed;
  465.  
  466. /*
  467.  * WME U-APSD qos info field defines
  468.  */
  469. #define WME_CAPINFO_UAPSD_EN            0x00000080
  470. #define WME_CAPINFO_UAPSD_VO            0x00000001
  471. #define WME_CAPINFO_UAPSD_VI            0x00000002
  472. #define WME_CAPINFO_UAPSD_BK            0x00000004
  473. #define WME_CAPINFO_UAPSD_BE            0x00000008
  474. #define WME_CAPINFO_UAPSD_ACFLAGS_SHIFT        0
  475. #define WME_CAPINFO_UAPSD_ACFLAGS_MASK        0xF
  476. #define WME_CAPINFO_UAPSD_MAXSP_SHIFT        5
  477. #define WME_CAPINFO_UAPSD_MAXSP_MASK        0x3
  478. #define WME_CAPINFO_IE_OFFSET            8
  479. #define WME_UAPSD_MAXSP(_qosinfo) (((_qosinfo) >> WME_CAPINFO_UAPSD_MAXSP_SHIFT) & WME_CAPINFO_UAPSD_MAXSP_MASK)
  480. #define WME_UAPSD_AC_ENABLED(_ac, _qosinfo) ( (1<<(3 - (_ac))) &   \
  481.         (((_qosinfo) >> WME_CAPINFO_UAPSD_ACFLAGS_SHIFT) & WME_CAPINFO_UAPSD_ACFLAGS_MASK) )
  482.  
  483. /*
  484.  * Atheros Advanced Capability information element.
  485.  */
  486. struct ieee80211_ie_athAdvCap {
  487.     u_int8_t athAdvCap_id;        /* IEEE80211_ELEMID_VENDOR */
  488.     u_int8_t athAdvCap_len;        /* length in bytes */
  489.     u_int8_t athAdvCap_oui[3];    /* 0x00, 0x03, 0x7f */
  490.     u_int8_t athAdvCap_type;        /* OUI type */
  491.     u_int8_t athAdvCap_subtype;    /* OUI subtype */
  492.     u_int8_t athAdvCap_version;    /* spec revision */
  493.     u_int8_t athAdvCap_capability;    /* Capability info */
  494.     u_int16_t athAdvCap_defKeyIndex;
  495. } __packed;
  496.  
  497. /*
  498.  * Atheros XR information element.
  499.  */
  500. struct ieee80211_xr_param {
  501.     u_int8_t param_id;
  502.     u_int8_t param_len;
  503.     u_int8_t param_oui[3];
  504.     u_int8_t param_oui_type;
  505.     u_int8_t param_oui_sybtype;
  506.     u_int8_t param_version;
  507.     u_int8_t param_Info;
  508.     u_int8_t param_base_bssid[IEEE80211_ADDR_LEN];
  509.     u_int8_t param_xr_bssid[IEEE80211_ADDR_LEN];
  510.     u_int16_t param_xr_beacon_interval;
  511.     u_int8_t param_base_ath_capability;
  512.     u_int8_t param_xr_ath_capability;
  513. } __packed;
  514.  
  515. /* Atheros capabilities */
  516. #define IEEE80211_ATHC_TURBOP    0x0001        /* Turbo Prime */
  517. #define IEEE80211_ATHC_COMP    0x0002        /* Compression */
  518. #define IEEE80211_ATHC_FF    0x0004        /* Fast Frames */
  519. #define IEEE80211_ATHC_XR    0x0008        /* Xtended Range support */
  520. #define IEEE80211_ATHC_AR    0x0010        /* Advanced Radar support */
  521. #define IEEE80211_ATHC_BURST    0x0020        /* Bursting - not negotiated */
  522. #define IEEE80211_ATHC_WME    0x0040        /* CWMin tuning */
  523. #define IEEE80211_ATHC_BOOST    0x0080        /* Boost */
  524.  
  525. /*
  526.  * Management Notification Frame
  527.  */
  528. struct ieee80211_mnf {
  529.     u_int8_t mnf_category;
  530.     u_int8_t mnf_action;
  531.     u_int8_t mnf_dialog;
  532.     u_int8_t mnf_status;
  533. } __packed;
  534. #define    MNF_SETUP_REQ    0
  535. #define    MNF_SETUP_RESP    1
  536. #define    MNF_TEARDOWN    2
  537.  
  538. /*
  539.  * Control frames.
  540.  */
  541. struct ieee80211_frame_min {
  542.     u_int8_t i_fc[2];
  543.     u_int8_t i_dur[2];
  544.     u_int8_t i_addr1[IEEE80211_ADDR_LEN];
  545.     u_int8_t i_addr2[IEEE80211_ADDR_LEN];
  546.     /* FCS */
  547. } __packed;
  548.  
  549. struct ieee80211_frame_rts {
  550.     u_int8_t i_fc[2];
  551.     u_int8_t i_dur[2];
  552.     u_int8_t i_ra[IEEE80211_ADDR_LEN];
  553.     u_int8_t i_ta[IEEE80211_ADDR_LEN];
  554.     /* FCS */
  555. } __packed;
  556.  
  557. struct ieee80211_frame_cts {
  558.     u_int8_t i_fc[2];
  559.     u_int8_t i_dur[2];
  560.     u_int8_t i_ra[IEEE80211_ADDR_LEN];
  561.     /* FCS */
  562. } __packed;
  563.  
  564. struct ieee80211_frame_ack {
  565.     u_int8_t i_fc[2];
  566.     u_int8_t i_dur[2];
  567.     u_int8_t i_ra[IEEE80211_ADDR_LEN];
  568.     /* FCS */
  569. } __packed;
  570.  
  571. struct ieee80211_frame_pspoll {
  572.     u_int8_t i_fc[2];
  573.     u_int8_t i_aid[2];
  574.     u_int8_t i_bssid[IEEE80211_ADDR_LEN];
  575.     u_int8_t i_ta[IEEE80211_ADDR_LEN];
  576.     /* FCS */
  577. } __packed;
  578.  
  579. struct ieee80211_frame_cfend {        /* NB: also CF-End+CF-Ack */
  580.     u_int8_t i_fc[2];
  581.     u_int8_t i_dur[2];    /* should be zero */
  582.     u_int8_t i_ra[IEEE80211_ADDR_LEN];
  583.     u_int8_t i_bssid[IEEE80211_ADDR_LEN];
  584.     /* FCS */
  585. } __packed;
  586.  
  587. /*
  588.  * BEACON management packets
  589.  *
  590.  *    octet timestamp[8]
  591.  *    octet beacon interval[2]
  592.  *    octet capability information[2]
  593.  *    information element
  594.  *        octet elemid
  595.  *        octet length
  596.  *        octet information[length]
  597.  */
  598.  
  599. typedef u_int8_t *ieee80211_mgt_beacon_t;
  600.  
  601. #define    IEEE80211_BEACON_INTERVAL(beacon) \
  602.     ((beacon)[8] | ((beacon)[9] << 8))
  603. #define    IEEE80211_BEACON_CAPABILITY(beacon) \
  604.     ((beacon)[10] | ((beacon)[11] << 8))
  605.  
  606. #define    IEEE80211_CAPINFO_ESS            0x0001
  607. #define    IEEE80211_CAPINFO_IBSS            0x0002
  608. #define    IEEE80211_CAPINFO_CF_POLLABLE        0x0004
  609. #define    IEEE80211_CAPINFO_CF_POLLREQ        0x0008
  610. #define    IEEE80211_CAPINFO_PRIVACY        0x0010
  611. #define    IEEE80211_CAPINFO_SHORT_PREAMBLE    0x0020
  612. #define    IEEE80211_CAPINFO_PBCC            0x0040
  613. #define    IEEE80211_CAPINFO_CHNL_AGILITY        0x0080
  614. /* bits 8-9 are reserved (8 now for specturm management) */
  615. #define IEEE80211_CAPINFO_SPECTRUM_MGMT        0x0100
  616. #define    IEEE80211_CAPINFO_SHORT_SLOTTIME    0x0400
  617. #define    IEEE80211_CAPINFO_RSN            0x0800
  618. /* bit 12 is reserved */
  619. #define    IEEE80211_CAPINFO_DSSSOFDM        0x2000
  620. /* bits 14-15 are reserved */
  621.  
  622. /*
  623.  * 802.11i/WPA information element (maximally sized).
  624.  */
  625. struct ieee80211_ie_wpa {
  626.     u_int8_t wpa_id;            /* IEEE80211_ELEMID_VENDOR */
  627.     u_int8_t wpa_len;        /* length in bytes */
  628.     u_int8_t wpa_oui[3];        /* 0x00, 0x50, 0xf2 */
  629.     u_int8_t wpa_type;        /* OUI type */
  630.     u_int16_t wpa_version;        /* spec revision */
  631.     u_int32_t wpa_mcipher[1];    /* multicast/group key cipher */
  632.     u_int16_t wpa_uciphercnt;    /* # pairwise key ciphers */
  633.     u_int32_t wpa_uciphers[8];    /* ciphers */
  634.     u_int16_t wpa_authselcnt;    /* authentication selector cnt*/
  635.     u_int32_t wpa_authsels[8];    /* selectors */
  636.     u_int16_t wpa_caps;        /* 802.11i capabilities */
  637.     u_int16_t wpa_pmkidcnt;        /* 802.11i pmkid count */
  638.     u_int16_t wpa_pmkids[8];        /* 802.11i pmkids */
  639. } __packed;
  640.  
  641. /*
  642.  * Management information element payloads.
  643.  */
  644.  
  645. enum {
  646.     IEEE80211_ELEMID_SSID        = 0,
  647.     IEEE80211_ELEMID_RATES        = 1,
  648.     IEEE80211_ELEMID_FHPARMS    = 2,
  649.     IEEE80211_ELEMID_DSPARMS    = 3,
  650.     IEEE80211_ELEMID_CFPARMS    = 4,
  651.     IEEE80211_ELEMID_TIM        = 5,
  652.     IEEE80211_ELEMID_IBSSPARMS    = 6,
  653.     IEEE80211_ELEMID_COUNTRY    = 7,
  654.     IEEE80211_ELEMID_REQINFO    = 10,
  655.     IEEE80211_ELEMID_CHALLENGE    = 16,
  656.     /* 17-31 reserved for challenge text extension */
  657.     IEEE80211_ELEMID_PWRCNSTR    = 32,
  658.     IEEE80211_ELEMID_PWRCAP        = 33,
  659.     IEEE80211_ELEMID_TPCREQ        = 34,
  660.     IEEE80211_ELEMID_TPCREP        = 35,
  661.     IEEE80211_ELEMID_SUPPCHAN    = 36,
  662.     IEEE80211_ELEMID_CHANSWITCHANN    = 37,
  663.     IEEE80211_ELEMID_MEASREQ    = 38,
  664.     IEEE80211_ELEMID_MEASREP    = 39,
  665.     IEEE80211_ELEMID_QUIET        = 40,
  666.     IEEE80211_ELEMID_IBSSDFS    = 41,
  667.     IEEE80211_ELEMID_ERP        = 42,
  668.     IEEE80211_ELEMID_RSN        = 48,
  669.     IEEE80211_ELEMID_XRATES        = 50,
  670.     IEEE80211_ELEMID_TPC        = 150,
  671.     IEEE80211_ELEMID_CCKM        = 156,
  672.     IEEE80211_ELEMID_VENDOR        = 221,    /* vendor private */
  673. };
  674.  
  675. #define IEEE80211_CHANSWITCHANN_BYTES 5
  676.  
  677. struct ieee80211_tim_ie {
  678.     u_int8_t    tim_ie;            /* IEEE80211_ELEMID_TIM */
  679.     u_int8_t    tim_len;
  680.     u_int8_t    tim_count;        /* DTIM count */
  681.     u_int8_t    tim_period;        /* DTIM period */
  682.     u_int8_t    tim_bitctl;        /* bitmap control */
  683.     u_int8_t    tim_bitmap[1];        /* variable-length bitmap */
  684. } __packed;
  685.  
  686. struct ieee80211_country_ie {
  687.     u_int8_t    ie;            /* IEEE80211_ELEMID_COUNTRY */
  688.     u_int8_t    len;
  689.     u_int8_t    cc[3];            /* ISO CC+(I)ndoor/(O)utdoor */
  690.     struct {
  691.         u_int8_t schan;            /* starting channel */
  692.         u_int8_t nchan;            /* number channels */
  693.         u_int8_t maxtxpwr;        /* tx power cap */
  694.     } __packed band[4];            /* up to 4 sub bands */
  695. } __packed;
  696.  
  697. #define IEEE80211_CHALLENGE_LEN        128
  698.  
  699. #define IEEE80211_SUPPCHAN_LEN        26
  700.  
  701. #define    IEEE80211_RATE_BASIC        0x80
  702. #define    IEEE80211_RATE_VAL        0x7f
  703.  
  704. /* EPR information element flags */
  705. #define    IEEE80211_ERP_NON_ERP_PRESENT    0x01
  706. #define    IEEE80211_ERP_USE_PROTECTION    0x02
  707. #define    IEEE80211_ERP_LONG_PREAMBLE    0x04
  708.  
  709. /* Atheros private advanced capabilities info */
  710. #define    ATHEROS_CAP_TURBO_PRIME        0x01
  711. #define    ATHEROS_CAP_COMPRESSION        0x02
  712. #define    ATHEROS_CAP_FAST_FRAME        0x04
  713. /* bits 3-6 reserved */
  714. #define    ATHEROS_CAP_BOOST        0x80
  715.  
  716. #define    ATH_OUI            0x7f0300        /* Atheros OUI */
  717. #define    ATH_OUI_TYPE        0x01
  718. #define    ATH_OUI_SUBTYPE        0x01
  719. #define ATH_OUI_VERSION        0x00
  720. #define    ATH_OUI_TYPE_XR        0x03
  721. #define    ATH_OUI_VER_XR        0x01
  722.  
  723. #define    WPA_OUI            0xf25000
  724. #define    WPA_OUI_TYPE        0x01
  725. #define    WPA_VERSION        1        /* current supported version */
  726.  
  727. #define    WPA_CSE_NULL        0x00
  728. #define    WPA_CSE_WEP40        0x01
  729. #define    WPA_CSE_TKIP        0x02
  730. #define    WPA_CSE_CCMP        0x04
  731. #define    WPA_CSE_WEP104        0x05
  732.  
  733. #define    WPA_ASE_NONE        0x00
  734. #define    WPA_ASE_8021X_UNSPEC    0x01
  735. #define    WPA_ASE_8021X_PSK    0x02
  736.  
  737. #define    RSN_OUI            0xac0f00
  738. #define    RSN_VERSION        1        /* current supported version */
  739.  
  740. #define    RSN_CSE_NULL        0x00
  741. #define    RSN_CSE_WEP40        0x01
  742. #define    RSN_CSE_TKIP        0x02
  743. #define    RSN_CSE_WRAP        0x03
  744. #define    RSN_CSE_CCMP        0x04
  745. #define    RSN_CSE_WEP104        0x05
  746.  
  747. #define    RSN_ASE_NONE        0x00
  748. #define    RSN_ASE_8021X_UNSPEC    0x01
  749. #define    RSN_ASE_8021X_PSK    0x02
  750.  
  751. #define    RSN_CAP_PREAUTH        0x01
  752.  
  753. #define    WME_OUI            0xf25000
  754. #define    WME_OUI_TYPE        0x02
  755. #define    WME_INFO_OUI_SUBTYPE    0x00
  756. #define    WME_PARAM_OUI_SUBTYPE    0x01
  757. #define    WME_VERSION        1
  758.  
  759. /* WME stream classes */
  760. #define    WME_AC_BE    0        /* best effort */
  761. #define    WME_AC_BK    1        /* background */
  762. #define    WME_AC_VI    2        /* video */
  763. #define    WME_AC_VO    3        /* voice */
  764.  
  765. /*
  766.  * AUTH management packets
  767.  *
  768.  *    octet algo[2]
  769.  *    octet seq[2]
  770.  *    octet status[2]
  771.  *    octet chal.id
  772.  *    octet chal.length
  773.  *    octet chal.text[253]
  774.  */
  775.  
  776. typedef u_int8_t *ieee80211_mgt_auth_t;
  777.  
  778. #define    IEEE80211_AUTH_ALGORITHM(auth) \
  779.     ((auth)[0] | ((auth)[1] << 8))
  780. #define    IEEE80211_AUTH_TRANSACTION(auth) \
  781.     ((auth)[2] | ((auth)[3] << 8))
  782. #define    IEEE80211_AUTH_STATUS(auth) \
  783.     ((auth)[4] | ((auth)[5] << 8))
  784.  
  785. #define    IEEE80211_AUTH_ALG_OPEN        0x0000
  786. #define    IEEE80211_AUTH_ALG_SHARED    0x0001
  787. #define    IEEE80211_AUTH_ALG_LEAP        0x0080
  788.  
  789. enum {
  790.     IEEE80211_AUTH_OPEN_REQUEST        = 1,
  791.     IEEE80211_AUTH_OPEN_RESPONSE        = 2,
  792. };
  793.  
  794. enum {
  795.     IEEE80211_AUTH_SHARED_REQUEST        = 1,
  796.     IEEE80211_AUTH_SHARED_CHALLENGE        = 2,
  797.     IEEE80211_AUTH_SHARED_RESPONSE        = 3,
  798.     IEEE80211_AUTH_SHARED_PASS        = 4,
  799. };
  800.  
  801. /*
  802.  * Reason codes
  803.  *
  804.  * Unlisted codes are reserved
  805.  */
  806.  
  807. enum {
  808.     IEEE80211_REASON_UNSPECIFIED        = 1,
  809.     IEEE80211_REASON_AUTH_EXPIRE        = 2,
  810.     IEEE80211_REASON_AUTH_LEAVE        = 3,
  811.     IEEE80211_REASON_ASSOC_EXPIRE        = 4,
  812.     IEEE80211_REASON_ASSOC_TOOMANY        = 5,
  813.     IEEE80211_REASON_NOT_AUTHED        = 6,
  814.     IEEE80211_REASON_NOT_ASSOCED        = 7,
  815.     IEEE80211_REASON_ASSOC_LEAVE        = 8,
  816.     IEEE80211_REASON_ASSOC_NOT_AUTHED    = 9,
  817.  
  818.     IEEE80211_REASON_RSN_REQUIRED        = 11,
  819.     IEEE80211_REASON_RSN_INCONSISTENT    = 12,
  820.     IEEE80211_REASON_IE_INVALID        = 13,
  821.     IEEE80211_REASON_MIC_FAILURE        = 14,
  822.  
  823.     IEEE80211_STATUS_SUCCESS        = 0,
  824.     IEEE80211_STATUS_UNSPECIFIED        = 1,
  825.     IEEE80211_STATUS_CAPINFO        = 10,
  826.     IEEE80211_STATUS_NOT_ASSOCED        = 11,
  827.     IEEE80211_STATUS_OTHER            = 12,
  828.     IEEE80211_STATUS_ALG            = 13,
  829.     IEEE80211_STATUS_SEQUENCE        = 14,
  830.     IEEE80211_STATUS_CHALLENGE        = 15,
  831.     IEEE80211_STATUS_TIMEOUT        = 16,
  832.     IEEE80211_STATUS_TOOMANY        = 17,
  833.     IEEE80211_STATUS_BASIC_RATE        = 18,
  834.     IEEE80211_STATUS_SP_REQUIRED        = 19,
  835.     IEEE80211_STATUS_PBCC_REQUIRED        = 20,
  836.     IEEE80211_STATUS_CA_REQUIRED        = 21,
  837.     IEEE80211_STATUS_TOO_MANY_STATIONS    = 22,
  838.     IEEE80211_STATUS_RATES            = 23,
  839.     IEEE80211_STATUS_SHORTSLOT_REQUIRED    = 25,
  840.     IEEE80211_STATUS_DSSSOFDM_REQUIRED    = 26,
  841. };
  842.  
  843. #define    IEEE80211_WEP_KEYLEN        5    /* 40bit */
  844. #define    IEEE80211_WEP_IVLEN        3    /* 24bit */
  845. #define    IEEE80211_WEP_KIDLEN        1    /* 1 octet */
  846. #define    IEEE80211_WEP_CRCLEN        4    /* CRC-32 */
  847. #define    IEEE80211_WEP_NKID        4    /* number of key ids */
  848.  
  849. /*
  850.  * 802.11i defines an extended IV for use with non-WEP ciphers.
  851.  * When the EXTIV bit is set in the key id byte an additional
  852.  * 4 bytes immediately follow the IV for TKIP.  For CCMP the
  853.  * EXTIV bit is likewise set but the 8 bytes represent the
  854.  * CCMP header rather than IV+extended-IV.
  855.  */
  856. #define    IEEE80211_WEP_EXTIV        0x20
  857. #define    IEEE80211_WEP_EXTIVLEN        4    /* extended IV length */
  858. #define    IEEE80211_WEP_MICLEN        8    /* trailing MIC */
  859.  
  860. #define    IEEE80211_CRC_LEN        4
  861.  
  862. /*
  863.  * Maximum acceptable MTU is:
  864.  *    IEEE80211_MAX_LEN - WEP overhead - CRC -
  865.  *        QoS overhead - RSN/WPA overhead
  866.  * Min is arbitrarily chosen > IEEE80211_MIN_LEN.  The default
  867.  * mtu is Ethernet-compatible; it's set by ether_ifattach.
  868.  */
  869. #define    IEEE80211_MTU_MAX        2290
  870. #define    IEEE80211_MTU_MIN        32
  871.  
  872. #define    IEEE80211_MAX_LEN        (2300 + IEEE80211_CRC_LEN + \
  873.     (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_CRCLEN))
  874. #define    IEEE80211_ACK_LEN \
  875.     (sizeof(struct ieee80211_frame_ack) + IEEE80211_CRC_LEN)
  876. #define    IEEE80211_MIN_LEN \
  877.     (sizeof(struct ieee80211_frame_min) + IEEE80211_CRC_LEN)
  878.  
  879. /*
  880.  * The 802.11 spec says at most 2007 stations may be
  881.  * associated at once.  For most AP's this is way more
  882.  * than is feasible so we use a default of 128.  This
  883.  * number may be overridden by the driver and/or by
  884.  * user configuration.
  885.  */
  886. #define    IEEE80211_AID_MAX        2007
  887. #define    IEEE80211_AID_DEF        128
  888.  
  889. #define    IEEE80211_AID(b)    ((b) &~ 0xc000)
  890.  
  891. /* 
  892.  * RTS frame length parameters.  The default is specified in
  893.  * the 802.11 spec.  The max may be wrong for jumbo frames.
  894.  */
  895. #define    IEEE80211_RTS_DEFAULT        512
  896. #define    IEEE80211_RTS_MIN        1
  897. #define    IEEE80211_RTS_MAX        2346
  898.  
  899. /* 
  900.  * Regulatory extention identifier for country IE.
  901.  */
  902. #define IEEE80211_REG_EXT_ID        201
  903.  
  904. /*
  905.  * IEEE 802.11 timer synchronization function (TSF) timestamp length
  906.  */
  907. #define IEEE80211_TSF_LEN        8
  908.  
  909. #endif /* _NET80211_IEEE80211_H_ */
  910.